--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
electron/backendCrashReport.js v4.7.0-rc.6 (b465eab5) Text, 9.99 KB
Ta5d6ff"use strict"Tb4b4b4;
Tff7b72const Te6edf3fs Tff7b72= Te6edf3requireTb4b4b4(Ta5d6ff"node:fs"Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3path Tff7b72= Te6edf3requireTb4b4b4(Ta5d6ff"node:path"Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3REPORT_FILENAME Tff7b72= Ta5d6ff"last-backend-crash.json"Tb4b4b4;
T8b949e/**
* @param {string} storageDir
* @returns {string}
*/
Tff7b72function Te6edf3getLogsDirTb4b4b4(Te6edf3storageDirTb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3pathTb4b4b4.Te6edf3joinTb4b4b4(Te6edf3storageDirTb4b4b4, Ta5d6ff"logs"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
T8b949e/**
* @param {string} storageDir
* @returns {string}
*/
Tff7b72function Te6edf3getCrashReportPathTb4b4b4(Te6edf3storageDirTb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3pathTb4b4b4.Te6edf3joinTb4b4b4(Te6edf3getLogsDirTb4b4b4(Te6edf3storageDirTb4b4b4)Tb4b4b4, Te6edf3REPORT_FILENAMETb4b4b4)Tb4b4b4;
Tb4b4b4}
T8b949e/**
* @param {string} storageDir
* @returns {string}
*/
Tff7b72function Te6edf3getBackendLogPathTb4b4b4(Te6edf3storageDirTb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3pathTb4b4b4.Te6edf3joinTb4b4b4(Te6edf3getLogsDirTb4b4b4(Te6edf3storageDirTb4b4b4)Tb4b4b4, Ta5d6ff"meshchatx.log"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
T8b949e/**
* @param {string} text
* @returns {string}
*/
Tff7b72function Te6edf3tailTextTb4b4b4(Te6edf3textTb4b4b4, Te6edf3maxChars Tff7b72= T79c0ff12000Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3text Tff7b72|| Tff7b72typeof Te6edf3text Tff7b72!== Ta5d6ff"string"Tb4b4b4) Tb4b4b4{
Tff7b72return Ta5d6ff""Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3textTb4b4b4.Te6edf3length Tff7b72<= Te6edf3maxCharsTb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3textTb4b4b4;
Tb4b4b4}
Tff7b72return Te6edf3textTb4b4b4.Te6edf3sliceTb4b4b4(Tff7b72-Te6edf3maxCharsTb4b4b4)Tb4b4b4;
Tb4b4b4}
T8b949e/**
* @param {object} crash
* @returns {object}
*/
Tff7b72function Te6edf3normalizeCrashTb4b4b4(Te6edf3crashTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3crash Tff7b72|| Tff7b72typeof Te6edf3crash Tff7b72!== Ta5d6ff"object"Tb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72nullTb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3code Tff7b72= Te6edf3crashTb4b4b4.Te6edf3code Tff7b72!= Tff7b72null Tff7b72? Tffa657NumberTb4b4b4(Te6edf3crashTb4b4b4.Te6edf3codeTb4b4b4) Tff7b72: Tff7b72nullTb4b4b4;
Tff7b72const Te6edf3stdout Tff7b72= Te6edf3tailTextTb4b4b4(Te6edf3crashTb4b4b4.Te6edf3stdout Tff7b72|| Ta5d6ff""Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3stderr Tff7b72= Te6edf3tailTextTb4b4b4(Te6edf3crashTb4b4b4.Te6edf3stderr Tff7b72|| Ta5d6ff""Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3at Tff7b72= Te6edf3crashTb4b4b4.Te6edf3at Tff7b72!= Tff7b72null Tff7b72? Tffa657NumberTb4b4b4(Te6edf3crashTb4b4b4.Te6edf3atTb4b4b4) Tff7b72: Tffa657DateTb4b4b4.Te6edf3nowTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72return Tb4b4b4{
Te6edf3codeTb4b4b4,
Te6edf3stdoutTb4b4b4,
Te6edf3stderrTb4b4b4,
Te6edf3atTb4b4b4,
Te6edf3platformTff7b72: Te6edf3crashTb4b4b4.Te6edf3platform Tff7b72|| Te6edf3processTb4b4b4.Te6edf3platformTb4b4b4,
Te6edf3pidTff7b72: Te6edf3crashTb4b4b4.Te6edf3pid Tff7b72!= Tff7b72null Tff7b72? Tffa657NumberTb4b4b4(Te6edf3crashTb4b4b4.Te6edf3pidTb4b4b4) Tff7b72: Tff7b72nullTb4b4b4,
Tb4b4b4}Tb4b4b4;
Tb4b4b4}
T8b949e/**
* @param {string} storageDir
* @param {object} crash
*/
Tff7b72function Te6edf3persistCrashReportTb4b4b4(Te6edf3storageDirTb4b4b4, Te6edf3crashTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3storageDirTb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72nullTb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3normalized Tff7b72= Te6edf3normalizeCrashTb4b4b4(Te6edf3crashTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3normalizedTb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72nullTb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3logsDir Tff7b72= Te6edf3getLogsDirTb4b4b4(Te6edf3storageDirTb4b4b4)Tb4b4b4;
Te6edf3fsTb4b4b4.Te6edf3mkdirSyncTb4b4b4(Te6edf3logsDirTb4b4b4, Tb4b4b4{ Te6edf3recursiveTff7b72: Tff7b72true Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3reportPath Tff7b72= Te6edf3getCrashReportPathTb4b4b4(Te6edf3storageDirTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3payload Tff7b72= Tb4b4b4{
Tb4b4b4...Te6edf3normalizedTb4b4b4,
Te6edf3savedAtTff7b72: Tffa657DateTb4b4b4.Te6edf3nowTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3reportPathTb4b4b4,
Te6edf3backendLogPathTff7b72: Te6edf3getBackendLogPathTb4b4b4(Te6edf3storageDirTb4b4b4)Tb4b4b4,
Tb4b4b4}Tb4b4b4;
Te6edf3fsTb4b4b4.Te6edf3writeFileSyncTb4b4b4(Te6edf3reportPathTb4b4b4, Ta5d6ff`Tffd700${Tffa657JSONTb4b4b4.Te6edf3stringifyTb4b4b4(Te6edf3payloadTb4b4b4, Tff7b72nullTb4b4b4, T79c0ff2Tb4b4b4)Tffd700}Ta5d6ff\nTa5d6ff`Tb4b4b4, Ta5d6ff"utf8"Tb4b4b4)Tb4b4b4;
Tff7b72return Te6edf3payloadTb4b4b4;
Tb4b4b4}
T8b949e/**
* @param {string} storageDir
* @returns {object|null}
*/
Tff7b72function Te6edf3loadCrashReportTb4b4b4(Te6edf3storageDirTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3storageDirTb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72nullTb4b4b4;
Tb4b4b4}
Tff7b72try Tb4b4b4{
Tff7b72const Te6edf3raw Tff7b72= Te6edf3fsTb4b4b4.Te6edf3readFileSyncTb4b4b4(Te6edf3getCrashReportPathTb4b4b4(Te6edf3storageDirTb4b4b4)Tb4b4b4, Ta5d6ff"utf8"Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3parsed Tff7b72= Tffa657JSONTb4b4b4.Te6edf3parseTb4b4b4(Te6edf3rawTb4b4b4)Tb4b4b4;
Tff7b72return Te6edf3normalizeCrashTb4b4b4(Te6edf3parsedTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
Tff7b72return Tff7b72nullTb4b4b4;
Tb4b4b4}
Tb4b4b4}
T8b949e/**
* @param {string} storageDir
*/
Tff7b72function Te6edf3clearCrashReportTb4b4b4(Te6edf3storageDirTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3storageDirTb4b4b4) Tb4b4b4{
Tff7b72returnTb4b4b4;
Tb4b4b4}
Tff7b72try Tb4b4b4{
Te6edf3fsTb4b4b4.Te6edf3unlinkSyncTb4b4b4(Te6edf3getCrashReportPathTb4b4b4(Te6edf3storageDirTb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
T8b949e/* already absent */
Tb4b4b4}
Tb4b4b4}
T8b949e/**
* @param {string} text
* @returns {object|null}
*/
Tff7b72function Te6edf3parseMemoryLogLineTb4b4b4(Te6edf3textTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3text Tff7b72|| Tff7b72typeof Te6edf3text Tff7b72!== Ta5d6ff"string"Tb4b4b4) Tb4b4b4{
Tff7b72return Tff7b72nullTb4b4b4;
Tb4b4b4}
Tff7b72for Tb4b4b4(Tff7b72const Te6edf3rawLine Tff7b72of Te6edf3textTb4b4b4.Te6edf3splitTb4b4b4(Ta5d6ff/\r?\n/Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3line Tff7b72= Te6edf3rawLineTb4b4b4.Te6edf3trimTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3lineTb4b4b4.Te6edf3startsWithTb4b4b4(Ta5d6ff"MESHCHAT_MEMORY:"Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72continueTb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3parsed Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4;
Tff7b72const Te6edf3payload Tff7b72= Te6edf3lineTb4b4b4.Te6edf3sliceTb4b4b4(Ta5d6ff"MESHCHAT_MEMORY:"Tb4b4b4.Te6edf3lengthTb4b4b4)Tb4b4b4.Te6edf3trimTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72for Tb4b4b4(Tff7b72const Te6edf3token Tff7b72of Te6edf3payloadTb4b4b4.Te6edf3splitTb4b4b4(Ta5d6ff/\s+/Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3idx Tff7b72= Te6edf3tokenTb4b4b4.Te6edf3indexOfTb4b4b4(Ta5d6ff"="Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3idx Tff7b72<= T79c0ff0Tb4b4b4) Tb4b4b4{
Tff7b72continueTb4b4b4;
Tb4b4b4}
Tff7b72const Te6edf3key Tff7b72= Te6edf3tokenTb4b4b4.Te6edf3sliceTb4b4b4(T79c0ff0Tb4b4b4, Te6edf3idxTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3value Tff7b72= Te6edf3tokenTb4b4b4.Te6edf3sliceTb4b4b4(Te6edf3idx Tff7b72+ T79c0ff1Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3key Tff7b72=== Ta5d6ff"total_mb" Tff7b72|| Te6edf3key Tff7b72=== Ta5d6ff"available_mb" Tff7b72|| Te6edf3key Tff7b72=== Ta5d6ff"percent_used"Tb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3num Tff7b72= Tffa657NumberTb4b4b4(Te6edf3valueTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tffa657NumberTb4b4b4.Tffa657isFiniteTb4b4b4(Te6edf3numTb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3parsedTb4b4b4[Te6edf3keyTb4b4b4] Tff7b72= Te6edf3numTb4b4b4;
Tb4b4b4}
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3parsedTb4b4b4[Te6edf3keyTb4b4b4] Tff7b72= Te6edf3valueTb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72return Tffa657ObjectTb4b4b4.Te6edf3keysTb4b4b4(Te6edf3parsedTb4b4b4)Tb4b4b4.Te6edf3length Tff7b72> T79c0ff0 Tff7b72? Te6edf3parsed Tff7b72: Tff7b72nullTb4b4b4;
Tb4b4b4}
Tff7b72return Tff7b72nullTb4b4b4;
Tb4b4b4}
T8b949e/**
* @param {string} stderr
* @param {string} stdout
* @param {number|null} exitCode
* @returns {{ category: string, summary: string, hints: string[] }}
*/
Tff7b72function Te6edf3diagnoseBackendCrashTb4b4b4(Te6edf3stderrTb4b4b4, Te6edf3stdoutTb4b4b4, Te6edf3exitCodeTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3combined Tff7b72= Ta5d6ff`Tffd700${Te6edf3stdout Tff7b72|| Ta5d6ff""Tffd700}Ta5d6ff\nTffd700${Te6edf3stderr Tff7b72|| Ta5d6ff""Tffd700}Ta5d6ff`Tb4b4b4.Te6edf3toLowerCaseTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3rawCombined Tff7b72= Ta5d6ff`Tffd700${Te6edf3stdout Tff7b72|| Ta5d6ff""Tffd700}Ta5d6ff\nTffd700${Te6edf3stderr Tff7b72|| Ta5d6ff""Tffd700}Ta5d6ff`Tb4b4b4;
Tff7b72const Te6edf3hints Tff7b72= Tb4b4b4[Tb4b4b4]Tb4b4b4;
Tff7b72const Te6edf3memoryLine Tff7b72= Te6edf3parseMemoryLogLineTb4b4b4(Te6edf3rawCombinedTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3memoryLineTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3available Tff7b72= Tffa657NumberTb4b4b4(Te6edf3memoryLineTb4b4b4.Te6edf3available_mbTb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3action Tff7b72= Tffa657StringTb4b4b4(Te6edf3memoryLineTb4b4b4.Te6edf3action Tff7b72|| Ta5d6ff""Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3action Tff7b72=== Ta5d6ff"abort" Tff7b72|| Tb4b4b4(Tffa657NumberTb4b4b4.Tffa657isFiniteTb4b4b4(Te6edf3availableTb4b4b4) Tff7b72&& Te6edf3available Tff7b72< T79c0ff200Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3hintsTb4b4b4.Te6edf3pushTb4b4b4(Ta5d6ff"Close other applications to free RAM, then relaunch."Tb4b4b4)Tb4b4b4;
Te6edf3hintsTb4b4b4.Te6edf3pushTb4b4b4(Ta5d6ff"On low-memory devices, try Emergency Mode from the crash screen."Tb4b4b4)Tb4b4b4;
Tff7b72return Tb4b4b4{
Te6edf3categoryTff7b72: Ta5d6ff"memory"Tb4b4b4,
Te6edf3summaryTff7b72: Tffa657NumberTb4b4b4.Tffa657isFiniteTb4b4b4(Te6edf3availableTb4b4b4)
Tff7b72? Ta5d6ff`Ta5d6ffThe backend reported critically low memory (Tffd700${Te6edf3availableTb4b4b4.Te6edf3toFixedTb4b4b4(T79c0ff0Tb4b4b4)Tffd700}Ta5d6ff MB available).Ta5d6ff`
Tff7b72: Ta5d6ff"The backend aborted startup due to critically low memory."Tb4b4b4,
Te6edf3hintsTb4b4b4,
Tb4b4b4}Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3action Tff7b72=== Ta5d6ff"warn"Tb4b4b4) Tb4b4b4{
Te6edf3hintsTb4b4b4.Te6edf3pushTb4b4b4(Ta5d6ff"Emergency Mode reduces startup memory use on 4 GB devices."Tb4b4b4)Tb4b4b4;
Tff7b72return Tb4b4b4{
Te6edf3categoryTff7b72: Ta5d6ff"memory"Tb4b4b4,
Te6edf3summaryTff7b72: Tffa657NumberTb4b4b4.Tffa657isFiniteTb4b4b4(Te6edf3availableTb4b4b4)
Tff7b72? Ta5d6ff`Ta5d6ffThe backend detected limited memory (Tffd700${Te6edf3availableTb4b4b4.Te6edf3toFixedTb4b4b4(T79c0ff0Tb4b4b4)Tffd700}Ta5d6ff MB available).Ta5d6ff`
Tff7b72: Ta5d6ff"The backend detected limited system memory during startup."Tb4b4b4,
Te6edf3hintsTb4b4b4,
Tb4b4b4}Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72if Tb4b4b4(
Te6edf3combinedTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"memoryerror"Tb4b4b4) Tff7b72||
Te6edf3combinedTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"out of memory"Tb4b4b4) Tff7b72||
Te6edf3combinedTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"cannot allocate memory"Tb4b4b4) Tff7b72||
Te6edf3combinedTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"oom"Tb4b4b4)
Tb4b4b4) Tb4b4b4{
Te6edf3hintsTb4b4b4.Te6edf3pushTb4b4b4(Ta5d6ff"Close other applications to free RAM, then relaunch."Tb4b4b4)Tb4b4b4;
Te6edf3hintsTb4b4b4.Te6edf3pushTb4b4b4(Ta5d6ff"On low-memory devices, try Emergency Mode from the crash screen."Tb4b4b4)Tb4b4b4;
Tff7b72return Tb4b4b4{
Te6edf3categoryTff7b72: Ta5d6ff"memory"Tb4b4b4,
Te6edf3summaryTff7b72: Ta5d6ff"The backend likely ran out of memory during startup."Tb4b4b4,
Te6edf3hintsTb4b4b4,
Tb4b4b4}Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(
Te6edf3combinedTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"eacces"Tb4b4b4) Tff7b72||
Te6edf3combinedTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"eperm"Tb4b4b4) Tff7b72||
Te6edf3combinedTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"permission denied"Tb4b4b4) Tff7b72||
Te6edf3combinedTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"access is denied"Tb4b4b4)
Tb4b4b4) Tb4b4b4{
Te6edf3hintsTb4b4b4.Te6edf3pushTb4b4b4(Ta5d6ff"Check that MeshChatX can write to its data folder."Tb4b4b4)Tb4b4b4;
Te6edf3hintsTb4b4b4.Te6edf3pushTb4b4b4(Ta5d6ff"Avoid running from protected locations; portable installs should stay on a writable drive."Tb4b4b4)Tb4b4b4;
Tff7b72return Tb4b4b4{
Te6edf3categoryTff7b72: Ta5d6ff"permission"Tb4b4b4,
Te6edf3summaryTff7b72: Ta5d6ff"The backend could not read or write a required file or folder."Tb4b4b4,
Te6edf3hintsTb4b4b4,
Tb4b4b4}Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(
Te6edf3combinedTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"address already in use"Tb4b4b4) Tff7b72||
Te6edf3combinedTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"eaddrinuse"Tb4b4b4) Tff7b72||
Te6edf3combinedTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"only one usage of each socket"Tb4b4b4) Tff7b72||
Te6edf3combinedTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"port 9337"Tb4b4b4)
Tb4b4b4) Tb4b4b4{
Te6edf3hintsTb4b4b4.Te6edf3pushTb4b4b4(
Ta5d6ff"Another backend copy may still be running. End ReticulumMeshChatX.exe in Task Manager, then relaunch."
Tb4b4b4)Tb4b4b4;
Tff7b72return Tb4b4b4{
Te6edf3categoryTff7b72: Ta5d6ff"port-conflict"Tb4b4b4,
Te6edf3summaryTff7b72: Ta5d6ff"Port 9337 is already in use by another process."Tb4b4b4,
Te6edf3hintsTb4b4b4,
Tb4b4b4}Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(
Te6edf3combinedTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"dll load failed"Tb4b4b4) Tff7b72||
Te6edf3combinedTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"vcruntime"Tb4b4b4) Tff7b72||
Te6edf3combinedTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"api-ms-win"Tb4b4b4) Tff7b72||
Te6edf3combinedTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"the specified module could not be found"Tb4b4b4)
Tb4b4b4) Tb4b4b4{
Te6edf3hintsTb4b4b4.Te6edf3pushTb4b4b4(Ta5d6ff"Install the latest Microsoft Visual C++ Redistributable (x64), then relaunch."Tb4b4b4)Tb4b4b4;
Tff7b72return Tb4b4b4{
Te6edf3categoryTff7b72: Ta5d6ff"runtime"Tb4b4b4,
Te6edf3summaryTff7b72: Ta5d6ff"A required Windows runtime library may be missing."Tb4b4b4,
Te6edf3hintsTb4b4b4,
Tb4b4b4}Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3combinedTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"database"Tb4b4b4) Tff7b72&& Tb4b4b4(Te6edf3combinedTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"corrupt"Tb4b4b4) Tff7b72|| Te6edf3combinedTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"malformed"Tb4b4b4)Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3hintsTb4b4b4.Te6edf3pushTb4b4b4(Ta5d6ff"Try Emergency Mode, or rename the storage folder after backing it up."Tb4b4b4)Tb4b4b4;
Tff7b72return Tb4b4b4{
Te6edf3categoryTff7b72: Ta5d6ff"database"Tb4b4b4,
Te6edf3summaryTff7b72: Ta5d6ff"The local database may be corrupted."Tb4b4b4,
Te6edf3hintsTb4b4b4,
Tb4b4b4}Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3combinedTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"!!! application crash detected !!!"Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3hintsTb4b4b4.Te6edf3pushTb4b4b4(Ta5d6ff"Open the saved crash report and meshchatx.log for the full diagnostic trace."Tb4b4b4)Tb4b4b4;
Tff7b72return Tb4b4b4{
Te6edf3categoryTff7b72: Ta5d6ff"python-crash"Tb4b4b4,
Te6edf3summaryTff7b72: Ta5d6ff"The Python backend crash recovery system captured a fatal error."Tb4b4b4,
Te6edf3hintsTb4b4b4,
Tb4b4b4}Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3exitCode Tff7b72=== T79c0ff3221226505 Tff7b72|| Te6edf3combinedTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"access violation"Tb4b4b4) Tff7b72|| Te6edf3combinedTb4b4b4.Te6edf3includesTb4b4b4(Ta5d6ff"segfault"Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3hintsTb4b4b4.Te6edf3pushTb4b4b4(
Ta5d6ff"This can happen on older GPUs or low-memory systems. Try creating a disable-gpu file in the data folder."
Tb4b4b4)Tb4b4b4;
Tff7b72return Tb4b4b4{
Te6edf3categoryTff7b72: Ta5d6ff"native-crash"Tb4b4b4,
Te6edf3summaryTff7b72: Ta5d6ff"The backend process crashed natively (access violation)."Tb4b4b4,
Te6edf3hintsTb4b4b4,
Tb4b4b4}Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3exitCode Tff7b72!= Tff7b72null Tff7b72&& Te6edf3exitCode Tff7b72!== T79c0ff0Tb4b4b4) Tb4b4b4{
Te6edf3hintsTb4b4b4.Te6edf3pushTb4b4b4(Ta5d6ff"Open the logs folder below and send meshchatx.log plus the crash report when asking for support."Tb4b4b4)Tb4b4b4;
Tff7b72return Tb4b4b4{
Te6edf3categoryTff7b72: Ta5d6ff"exit-code"Tb4b4b4,
Te6edf3summaryTff7b72: Ta5d6ff`Ta5d6ffThe backend exited with code Tffd700${Te6edf3exitCodeTffd700}Ta5d6ff.Ta5d6ff`Tb4b4b4,
Te6edf3hintsTb4b4b4,
Tb4b4b4}Tb4b4b4;
Tb4b4b4}
Tff7b72return Tb4b4b4{
Te6edf3categoryTff7b72: Ta5d6ff"unknown"Tb4b4b4,
Te6edf3summaryTff7b72: Ta5d6ff"The backend stopped before the UI could connect."Tb4b4b4,
Te6edf3hintsTff7b72: Tb4b4b4[Ta5d6ff"Review the saved crash report and meshchatx.log for details."Tb4b4b4]Tb4b4b4,
Tb4b4b4}Tb4b4b4;
Tb4b4b4}
T8b949e/**
* @param {string} storageDir
* @param {string} reticulumConfigDir
* @returns {object}
*/
Tff7b72function Te6edf3getDiagnosticPathsTb4b4b4(Te6edf3storageDirTb4b4b4, Te6edf3reticulumConfigDirTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3logsDir Tff7b72= Te6edf3storageDir Tff7b72? Te6edf3getLogsDirTb4b4b4(Te6edf3storageDirTb4b4b4) Tff7b72: Tff7b72nullTb4b4b4;
Tff7b72return Tb4b4b4{
Te6edf3storageDirTff7b72: Te6edf3storageDir Tff7b72|| Tff7b72nullTb4b4b4,
Te6edf3reticulumConfigDirTff7b72: Te6edf3reticulumConfigDir Tff7b72|| Tff7b72nullTb4b4b4,
Te6edf3logsDirTb4b4b4,
Te6edf3backendLogPathTff7b72: Te6edf3storageDir Tff7b72? Te6edf3getBackendLogPathTb4b4b4(Te6edf3storageDirTb4b4b4) Tff7b72: Tff7b72nullTb4b4b4,
Te6edf3crashReportPathTff7b72: Te6edf3storageDir Tff7b72? Te6edf3getCrashReportPathTb4b4b4(Te6edf3storageDirTb4b4b4) Tff7b72: Tff7b72nullTb4b4b4,
Tb4b4b4}Tb4b4b4;
Tb4b4b4}
Te6edf3moduleTb4b4b4.Te6edf3exports Tff7b72= Tb4b4b4{
Te6edf3REPORT_FILENAMETb4b4b4,
Te6edf3clearCrashReportTb4b4b4,
Te6edf3diagnoseBackendCrashTb4b4b4,
Te6edf3getBackendLogPathTb4b4b4,
Te6edf3getCrashReportPathTb4b4b4,
Te6edf3getDiagnosticPathsTb4b4b4,
Te6edf3getLogsDirTb4b4b4,
Te6edf3loadCrashReportTb4b4b4,
Te6edf3normalizeCrashTb4b4b4,
Te6edf3parseMemoryLogLineTb4b4b4,
Te6edf3persistCrashReportTb4b4b4,
Te6edf3tailTextTb4b4b4,
Tb4b4b4}Tb4b4b4;
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────